function foo(m = 'aaa', n = 'bbb') {
  console.log(m, n)
}

foo(1)


/**
 * 注意两种不同写法的区别
 */
//解构及默认值结合
function printInfo({name, age} = {name: 'why', age: '18'}) {
  console.log(name, age)
}

//此时，只传一个属性时，另一个属性会是undefined
//abc undefined
printInfo({name: 'abc'})

function printInfo1({name = 'why', age = 18} = {}) {
  console.log(name, age)
}

//此时只传一个属性时，另一个属性依然是默认值
// lij 18
printInfo1({name: 'lij'})

/**
 * 带有默认参数的函数，默认参数一般写在最后一个位置
 */
function bar(m, n, def = 'default value') {

}

/**
 * 有默认值参数的函数的length属性会变化
 * 且默认值之后的所有参数个数都不算在length中
 */
function bar1(m, n, x = 'a', y) {

}

console.log(bar1.length) //2
